/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package eu.epfc.dnet.mastermind.services;

import eu.epfc.dnet.mastermind.hibernate.TgamesHelper;
import eu.epfc.dnet.mastermind.hibernate.TusersHelper;
import eu.epfc.dnet.mastermind.model.beans.RankingBean;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import org.springframework.stereotype.Service;

/**
 *
 * @author Pierre Buvé & Nicolas Van Damme
 */
@Service
public class RankingManager {

    TgamesHelper tgamesHelper;
    TusersHelper tusersHelper;
    
    /**
     * Récupère la list des utilisateur et le meilleur temps qui leur est associer  
     * et trie la liste de façon croissante 
     * @return 
     */
    public List<RankingBean> getRankingBestTimeList() {
        tusersHelper = new TusersHelper();
        List<String> list = tusersHelper.getAllUsersList();
        List<RankingBean> rankingBeans = new ArrayList<RankingBean>();
        Iterator<String> i = list.iterator();
        while (i.hasNext()){
            String temp = i.next();
            RankingBean bean = new RankingBean();
            bean.setUsername(temp);
            String bestTime = tusersHelper.getBestTimeUser(temp);
            bean.setDuration(Integer.parseInt(bestTime));
            bean.setTime(secToTime(bean.getDuration()));
            rankingBeans.add(bean);
        }
        Collections.sort(rankingBeans);
        return rankingBeans;
        
    }
        /**
     * Récupère la list des utilisateur et le pire temps qui leur est associer  
     * et trie la liste de façon croissante 
     * @return 
     */
        public List<RankingBean> getRankingWorstTimeList() {
        tusersHelper = new TusersHelper();
        List<String> list = tusersHelper.getAllUsersList();
        List<RankingBean> rankingBeans = new ArrayList<RankingBean>();
        Iterator<String> i = list.iterator();
        while (i.hasNext()){
            String temp = i.next();
            RankingBean bean = new RankingBean();
            bean.setUsername(temp);
            String bestTime = tusersHelper.getWorstTimeUser(temp);
            bean.setDuration(Integer.parseInt(bestTime));
            bean.setTime(secToTime(bean.getDuration()));
            rankingBeans.add(bean);
        }
        Collections.sort(rankingBeans);
        return rankingBeans;
        
    }

    /**
     * Récupère la list des utilisateur et le temps total de jeu qui leur est associer  
     * et trie la liste de façon croissante 
     * @return 
     */
    public List<RankingBean> getRankingTotalTimeList() {
        tusersHelper = new TusersHelper();
        List<String> list = tusersHelper.getAllUsersList();
        List<RankingBean> rankingBeans = new ArrayList<RankingBean>();
        Iterator<String> i = list.iterator();
        while (i.hasNext()){
            String temp = i.next();
            RankingBean bean = new RankingBean();
            bean.setUsername(temp);
            String totalTime = tusersHelper.getTotalTimeUser(temp);
            bean.setDuration(Integer.parseInt(totalTime));
            bean.setTime(secToTime(bean.getDuration()));
            rankingBeans.add(bean);
        }
        Collections.sort(rankingBeans);
        return rankingBeans;
    }

    /**
     * Récupère la list des utilisateur et la moyenne du temps de victoire qui leur est associer  
     * et trie la liste de façon croissante 
     * @return 
     */
    public List<RankingBean> getRankingAvgVictoryList() {
        tusersHelper = new TusersHelper();
        List<String> list = tusersHelper.getAllUsersList();
        List<RankingBean> rankingBeans = new ArrayList<RankingBean>();
        Iterator<String> i = list.iterator();
        while (i.hasNext()){
            String temp = i.next();
            RankingBean bean = new RankingBean();
            bean.setUsername(temp);
            String avgTime = tusersHelper.getAvgVictoryTimeUser(temp);
            bean.setDuration(Integer.parseInt(avgTime));
            bean.setTime(secToTime(bean.getDuration()));
            rankingBeans.add(bean);
        }
        Collections.sort(rankingBeans);
        return rankingBeans;
    }
    
    /**
     * Transforme un int (nombres de secondes) en HH:MM:SS et le retourne sous forme de String
     * @param sec
     * @return 
     */
    private String secToTime(int sec){
        String resultS;
        String resultM;
        String resultH;
        if(sec%60<10){resultS = "0"+sec%60;}
        else{resultS = String.valueOf(sec%60);}
        
        if((sec/60)%60<10){resultM = "0"+(sec/60)%60;}
        else{resultM = String.valueOf((sec/60)%60);}
        
        if(sec/(60*60)<10){resultH = "0"+sec/(60*60);}
        else{resultH = String.valueOf(sec/(60*60));}

        return resultH+":"+resultM+":"+resultS;
    }
    
}
